/**
 * http.js - HTTP请求和用户认证模块
 * 
 * 主要功能：
 * 1. 配置和创建axios实例
 * 2. 处理请求拦截和认证
 * 3. 提供登录状态验证
 * 
 * 技术栈：
 * - axios: 用于处理HTTP请求的库
 * - localStorage: 用于存储用户token和信息
 * 
 * API接口说明：
 * - baseURL: 'http://localhost:8888'
 * - 登录验证: /users/info
 * - 所有请求都会自动带上token认证
 */

/**
 * axios实例配置
 * 创建一个自定义的axios实例，设置基础配置项
 * 
 * 配置说明：
 * - baseURL: 所有请求的基础URL
 * - 可以在这里添加其他全局配置，如超时时间、请求头等
 */
const http = axios.create({
  baseURL: 'http://localhost:8888',  // API服务器地址
});


/**
 * 请求拦截器配置
 * 在每个请求发送之前自动执行
 * 
 * 主要功能：
 * 1. 检查并添加token到请求头
 * 2. 统一处理请求配置
 * 3. 处理请求错误
 * 
 * @param {Object} config - axios请求配置对象
 * @returns {Object} 修改后的配置对象
 */
http.interceptors.request.use(
  function (config) {
    // 从localStorage获取token
    const token = localStorage.getItem('token');
    
    // 如果token存在，添加到请求头
    if (token) {
      // 将token添加到authorization字段
      // 后端会从这个字段获取token进行验证
      config.headers['authorization'] = token;
    }
    
    return config;  // 返回修改后的配置
  }, 
  function (error) {
    // 对请求错误的处理
    // 可以在这里统一处理请求发送失败的情况
    return Promise.reject(error);
  }
);


/**
 * 登录状态检查函数
 * 通过验证token和用户信息来确认登录状态
 * 
 * 实现流程：
 * 1. 检查本地存储的token和用户ID
 * 2. 调用后端接口验证用户信息
 * 3. 返回登录状态和用户信息
 * 
 * @returns {Promise<Object>} 返回登录状态对象
 * - status: 1表示已登录，0表示未登录
 * - msg: 状态信息
 * - token: 用户token（如果已登录）
 * - id: 用户ID（如果已登录）
 * - info: 用户信息（如果已登录）
 */
async function isLogin() {
  // 从localStorage获取用户凭证
  const token = localStorage.getItem('token');
  const id = localStorage.getItem('id');
  
  // 如果没有token或id，直接返回未登录状态
  if (!token || !id) {
    return { 
      status: 0, 
      msg: '用户未登录' 
    };
  }
  
  try {
    // 调用后端接口验证用户信息
    // 发送GET请求到/users/info接口，带上用户ID
    const { data } = await http.get('/users/info', { 
      params: { id } 
    });
    
    // 验证响应状态码
    // code为1表示验证成功
    if (data.code !== 1) {
      return { 
        status: 0, 
        msg: '用户未登录' 
      };
    }
    
    // 返回登录成功状态和用户信息
    return {
      status: 1,
      msg: '用户已登录',
      token,
      id,
      info: data.info  // 包含用户的详细信息
    };
  } catch (error) {
    // 请求失败返回未登录状态
    // 可能是网络错误或服务器问题
    return { 
      status: 0, 
      msg: '用户未登录' 
    };
  }
}

// 4. 搜索功能接口
async function searchItems(query, page = 1, pageSize = 10) {
  try {
    const { data } = await http.get('/items/search', {
      params: {
        query,
        page,
        pageSize
      }
    });
    return data;
  } catch (error) {
    console.error('搜索失败:', error);
    return { success: false, msg: '搜索失败' };
  }
}

// 5. 分页功能接口
async function fetchPageItems(page = 1, pageSize = 10) {
  try {
    const { data } = await http.get('/items', {
      params: {
        page,
        pageSize
      }
    });
    return data;
  } catch (error) {
    console.error('分页加载失败:', error);
    return { success: false, msg: '分页加载失败' };
  }
}

// 6. 结合搜索和分页的功能接口
async function searchAndFetchItems(query, page = 1, pageSize = 10) {
  try {
    const { data } = await http.get('/items/search', {
      params: {
        query,
        page,
        pageSize
      }
    });
    return data;
  } catch (error) {
    console.error('搜索和分页加载失败:', error);
    return { success: false, msg: '搜索和分页加载失败' };
  }
}